package leetcode.sword;

public class Solution46 {

    public static void main(String[] args) {
        System.out.println(translateNum(503323237));
    }

    public static int translateNum(int num) {

        //如果加入的新数字可以与老数字结合，即An!=0 且 AnAn-1<26， 则有f(n)=f(n-1)+f(n-2)
        //否则f(n)=f(n-1)
        //动态规划

//        //获取初始值f0
//        int oldLast = num % 10; //记录个位数
//        int f0 = 1, f1 = 1, tmp = 0;
//        num /= 10;
//        int newLast = 0;
//
//        //获取初始值f1
//        if(num!=0){
//            newLast = num % 10;
//            if ( newLast != 0 && newLast * 10 + oldLast < 26 ) f1 = 2;
//            num /= 10;
//            oldLast = newLast;
//        }
//
//        //开始迭代
//        while(num!=0){
//            newLast = num % 10;
//            if ( newLast != 0 && newLast * 10 + oldLast < 26 ){
//                tmp = f0 + f1;
//                f0 = f1;
//                f1 = tmp;
//            }else {
//                f0 = f1;
//            }
//            num /= 10;
//            oldLast = newLast;
//        }
//        return f1;

        //精简版
        int f0 = 1, f1 = 1, tmp = 0;
        int oldLast = num % 10, newLast = 0;
        while(num!=0){
            num /= 10;
            newLast = num % 10;
            if ( newLast != 0 && newLast * 10 + oldLast < 26 ){
                tmp = f0 + f1;
                f0 = f1;
                f1 = tmp;
            }else {
                f0 = f1;
            }
            oldLast = newLast;
        }
        return f1;
    }
}
